package config

import (
	"dta-apk/global"
	"fmt"
	"os"

	"github.com/fsnotify/fsnotify"
	"github.com/spf13/viper"
)

func Init() {

	viperConfig := viper.New()
	// 设置配置文件名和路径
	viperConfig.SetConfigName("config")
	// dev test pro
	viperConfig.SetConfigType("yml")
	// 配置文件路径
	viperConfig.AddConfigPath(".")
	// 设置读取的前缀
	viperConfig.SetEnvPrefix(getAppEnv())
	viperConfig.AutomaticEnv()

	// 读取配置文件
	err := viperConfig.ReadInConfig()
	if err != nil {
		panic(fmt.Errorf("读取配置文件失败: %s", err))
	}

	viperConfig.WatchConfig()
	// 这是改动了就会自动注入
	viperConfig.OnConfigChange(func(e fsnotify.Event) {
		fmt.Println("config file changed:", e.Name)
		if err = viperConfig.Unmarshal(&global.Config); err != nil {
			fmt.Println(err)
		}
	})

	// 这里才是把yaml配置文件解析放入到Config对象的过程---map---config
	if err = viperConfig.Unmarshal(&global.Config); err != nil {
		fmt.Println(err)
	}
}

// 获取配置的运行环境变量
func getAppEnv() string {
	env, isExist := os.LookupEnv("APP_ENV")
	if isExist {
		return env
	}
	return "dev"
}
